package bz.ziro.kanbe.bean;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import java.util.logging.Logger;

import bz.ziro.kanbe.logic.FirstLogic;
import bz.ziro.kanbe.logic.LogLogic;
import bz.ziro.kanbe.model.Site;

/**
 * サイトデータ
 * @author Administrator
 */
public class SiteData {

    @SuppressWarnings("unused")
    private static final Logger logger = Logger.getLogger(FirstLogic.class.getName());
	/**
	 * 使用するサイトデータ
	 */
	private Site site;
	
	/**
	 * 使用できるタイムゾーン一覧
	 */
	private static List<String> timeZoneList = null;

	/**
	 * デフォルトで使用するタイムゾーン
	 */
	private static String defaultTimeZone = "JST";

	/**
	 * コンストラクタ
	 * @param site
	 */
	public SiteData(Site aSite) {
		site = aSite;
		//初期化を行う
		init();
	}

	/**
	 * 初期化処理
	 */
	private void init() {
	
		defaultTimeZone = site.getDefaultTimezone();
		//初期化されている場合
		if ( timeZoneList != null ) {
			return;
		}

		//タイムゾーンを初期化
		timeZoneList = new ArrayList<String>();
		//タイムゾーンの一覧を取得
		String[] timeZones = TimeZone.getAvailableIDs();
		//タイムゾーン数回繰り返す
		for ( String zone : timeZones ) {
			timeZoneList.add(zone);
		}
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return site.getName();
	}

	/**
	 * @return the detail
	 */
	public String getDetail() {
		return site.getDetail();
	}

	/**
	 * @return the detail
	 */
	public String getRssUrl(int num) {
		return "/rss?num=" + num;
	}

    /**
     * 作成時刻の取得
     * @return
     */
    public String getCreateDate() {
    	return getCreateFormatDate("yyyy/MM/dd HH:mm:ss");
    }
    /**
     * 作成時刻の取得
     * @param string
     * @return
     */
    public String getCreateFormatDate(String string) {
		return getDate(site.getCreateDate(),string);
	}
    /**
     * 編集時刻の取得
     * @return
     */
    public String getEditDate() {
    	return getEditFormatDate("yyyy/MM/dd HH:mm:ss");
    }
    /**
     * 編集時刻の取得
     * @param string
     * @return
     */
    public String getEditFormatDate(String string) {
		return getDate(site.getEditDate(),string);
	}
 
    /**
     * 時刻の取得
     * @param aDate
     * @param format
     * @return
     */
    private String getDate(Date aDate, String format) {
    	if ( aDate == null ) {
    		return "";
    	}
		return getLocaleTime(aDate,format);
    }
   
    /**
     * 更新リストを作成
     * @return
     */
    public List<LogData> getUpdateList(int num) {
    	return LogLogic.getLogList(site, num);
    }

    /**
     * 現地時刻を取得
     * @param aDate
     * @param format
     * @param locale
     * @return
     */
    public static String getLocaleTime(Date aDate, String format) {
    	TimeZone zone = TimeZone.getTimeZone(defaultTimeZone);
    	SimpleDateFormat sdf = new SimpleDateFormat(format);
    	sdf.setTimeZone(zone);
		return sdf.format(aDate);
    }
}
